/*
 * FunctionNameDefinition.cpp
 *
 *  Created on: 21/nov/2010
 *      Author: computer
 */

#include "DerivationTree.h"
#include "FunctionDefinitionInstruction.h"

FunctionNameDefinitionNode::FunctionNameDefinitionNode() : NodeTree_CRTP<FunctionNameDefinitionNode>(), buffer(0), length(0) { }

FunctionNameDefinitionNode::FunctionNameDefinitionNode(char* _buffer, unsigned int _length) : NodeTree_CRTP<FunctionNameDefinitionNode>(), buffer(_buffer), length(_length) { }

FunctionNameDefinitionNode::FunctionNameDefinitionNode(const FunctionNameDefinitionNode& copy) : NodeTree_CRTP<FunctionNameDefinitionNode>(copy) {
	length = copy.length;
	buffer = new char[length];
	for (unsigned int i = 0; i < length; ++i) buffer[i] = copy.buffer[i];
}

std::string FunctionNameDefinitionNode::getName() const {
	return std::string(buffer);
}

bool FunctionNameDefinitionNode::execute(Pointer<LeonardVirtualMachine> LVM) {
	AutoPointer<TreeExpression::Expression> function(new TreeExpression::FunctionDefinitionInstruction(std::string(buffer)));
	LVM->push(function);
	return true;
}
